﻿2026-05-17T04:49:37.5143642Z ##[group]Run pnpm --filter @rebno/client test:e2e
2026-05-17T04:49:37.5144882Z [36;1mpnpm --filter @rebno/client test:e2e[0m
2026-05-17T04:49:37.5208001Z shell: /usr/bin/bash -e {0}
2026-05-17T04:49:37.5208294Z env:
2026-05-17T04:49:37.5208517Z   SKIP_STAGING_VERIFY: false
2026-05-17T04:49:37.5208788Z   SKIP_PHASE_4_CARRYOVER: 
2026-05-17T04:49:37.5209041Z   SKIP_STAGING_SMOKE: false
2026-05-17T04:49:37.5209355Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-17T04:49:37.5209737Z   STAGING_URL: https://staging.rebno.decidel.com
2026-05-17T04:49:37.5210348Z   STAGING_INVITE_TOKEN: ***
2026-05-17T04:49:37.5210786Z   UAT_ACCOUNT_A: ***
2026-05-17T04:49:37.5211184Z   UAT_PASSWORD_A: ***
2026-05-17T04:49:37.5211557Z   UAT_ACCOUNT_B: ***
2026-05-17T04:49:37.5211855Z   UAT_PASSWORD_B: ***
2026-05-17T04:49:37.5212080Z ##[endgroup]
2026-05-17T04:49:37.8254283Z 
2026-05-17T04:49:37.8255559Z > @rebno/client@0.1.0 test:e2e /home/runner/work/rebno/rebno/apps/client
2026-05-17T04:49:37.8256785Z > playwright test
2026-05-17T04:49:37.8257400Z 
2026-05-17T04:49:39.3786091Z 
2026-05-17T04:49:39.3787070Z Running 39 tests using 1 worker
2026-05-17T04:49:39.3787810Z 
2026-05-17T04:50:05.0788373Z   ✘   1 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (23.5s)
2026-05-17T04:50:17.6206135Z   ✘   2 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (retry #1) (11.0s)
2026-05-17T04:50:35.3340277Z   ✘   3 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (15.5s)
2026-05-17T04:50:51.4856505Z   ✘   4 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (retry #1) (14.2s)
2026-05-17T04:51:01.0758298Z   ✘   5 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (8.3s)
2026-05-17T04:51:10.7666204Z   ✘   6 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (retry #1) (8.5s)
2026-05-17T04:51:20.7890805Z   ✓   7 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block south wall (D-62 anti-revert) (9.3s)
2026-05-17T04:51:29.1257497Z   ✓   8 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block north wall (D-62 anti-revert) (8.3s)
2026-05-17T04:51:47.9153366Z   ✘   9 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) (18.5s)
2026-05-17T04:51:58.0508300Z   ✓  10 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) (retry #1) (9.4s)
2026-05-17T04:52:06.0436472Z   ✓  11 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block east wall (D-62 anti-revert) (8.0s)
2026-05-17T04:52:32.9310751Z   ✘  12 [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) (25.9s)
2026-05-17T04:53:02.1029237Z   ✓  13 [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) (retry #1) (28.4s)
2026-05-17T04:53:35.4605473Z   ✓  14 [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:19:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene (33.3s)
2026-05-17T04:53:45.1394532Z   ✓  15 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block south wall (9.6s)
2026-05-17T04:53:54.1965924Z   ✓  16 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block north wall (9.0s)
2026-05-17T04:54:03.0751737Z   ✓  17 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block west wall (8.8s)
2026-05-17T04:54:21.3551894Z   ✘  18 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall (18.0s)
2026-05-17T04:54:31.0925565Z   ✓  19 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall (retry #1) (8.9s)
2026-05-17T04:55:02.2169310Z   ✘  20 [chromium] › test/e2e/cli-08-ghost-run-disconnect.spec.ts:21:1 › disconnect while moving: observer does not see stale remote cardinal run (28.8s)
2026-05-17T04:55:33.8683262Z   ✘  21 [chromium] › test/e2e/cli-08-ghost-run-disconnect.spec.ts:21:1 › disconnect while moving: observer does not see stale remote cardinal run (retry #1) (28.6s)
2026-05-17T04:55:52.6314201Z   ✘  22 [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) (16.7s)
2026-05-17T04:56:10.0032798Z   ✘  23 [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) (retry #1) (15.3s)
2026-05-17T04:56:16.2702898Z   ✓  24 [chromium] › test/e2e/cli-08-nameplate-offset.e2e.test.ts:30:1 › nameplate sits above sprite top (D-45) (5.5s)
2026-05-17T04:57:03.4600410Z   ✓  25 [chromium] › test/e2e/cli-08-nameplate-stable.spec.ts:37:3 › CLI-08 D-45d nameplate stability under remote motion › constant-vx walk-right: nameplate_y flip count over 30s ≤ ceiling (Plan 06.4-12 D-45d gate) (47.1s)
2026-05-17T04:57:49.1212949Z   ✓  26 [chromium] › test/e2e/cli-08-nameplate-stable.spec.ts:125:3 › CLI-08 D-45d nameplate stability under remote motion › constant-vx walk-left (KeyA): symmetric stability — flips ≤ ceiling (locks symmetric fix) (45.6s)
2026-05-17T04:58:02.0859229Z   ✓  27 [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) (12.9s)
2026-05-17T04:58:10.3744833Z   ✘  28 [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (7.8s)
2026-05-17T04:58:29.5269452Z   ✘  29 [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (retry #1) (18.1s)
2026-05-17T04:58:45.6417692Z   ✘  30 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) (14.7s)
2026-05-17T04:59:14.1688750Z   ✘  31 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) (retry #1) (26.7s)
2026-05-17T04:59:32.2031239Z   ✘  32 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) (16.5s)
2026-05-17T05:00:01.1439018Z   ✘  33 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) (retry #1) (27.2s)
2026-05-17T05:00:24.5452913Z   ✘  34 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (21.1s)
2026-05-17T05:00:48.9364997Z   ✘  35 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (retry #1) (22.1s)
2026-05-17T05:00:55.7606997Z   ✓  36 [chromium] › test/e2e/cli-08-ws-reconnect.e2e.test.ts:31:1 › WS-kill: cached reconnection token survives a transient drop (Round-5 FIX A — no eviction-loop, no force_reset banner) (6.1s)
2026-05-17T05:01:13.5428612Z   ✘  37 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (16.6s)
2026-05-17T05:01:33.2570793Z   ✘  38 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (retry #1) (17.9s)
2026-05-17T05:01:36.0286654Z   ✓  39 [chromium] › test/e2e/login-contrast.e2e.test.ts:64:3 › LoginScene contrast › heading has ≥ 4.5:1 contrast ratio on #0A0E1A background (2.0s)
2026-05-17T05:01:37.7806095Z   ✓  40 [chromium] › test/e2e/login-contrast.e2e.test.ts:72:3 › LoginScene contrast › username label has ≥ 4.5:1 contrast ratio (1.7s)
2026-05-17T05:01:39.4687557Z   ✓  41 [chromium] › test/e2e/login-contrast.e2e.test.ts:78:3 › LoginScene contrast › password label has ≥ 4.5:1 contrast ratio (1.7s)
2026-05-17T05:01:41.0939613Z   ✓  42 [chromium] › test/e2e/login-contrast.e2e.test.ts:84:3 › LoginScene contrast › username input text has ≥ 4.5:1 contrast ratio (1.6s)
2026-05-17T05:01:42.7906936Z   ✓  43 [chromium] › test/e2e/login-contrast.e2e.test.ts:90:3 › LoginScene contrast › password input text has ≥ 4.5:1 contrast ratio (1.7s)
2026-05-17T05:01:44.4298673Z   ✓  44 [chromium] › test/e2e/login-contrast.e2e.test.ts:96:3 › LoginScene contrast › submit CTA button text has ≥ 4.5:1 contrast ratio (1.6s)
2026-05-17T05:01:46.6403335Z   ✓  45 [chromium] › test/e2e/login-contrast.e2e.test.ts:104:3 › LoginScene contrast › focused input border-color is accent #22D3EE (rgb 34,211,238) (2.2s)
2026-05-17T05:01:55.8238092Z   ✘  46 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (8.7s)
2026-05-17T05:02:05.8673257Z   ✘  47 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (retry #1) (8.9s)
2026-05-17T05:02:11.5875912Z   ✓  48 [chromium] › test/e2e/logout.e2e.test.ts:51:3 › Esc menu › canvas click opens menu (D-24 secondary trigger) (5.0s)
2026-05-17T05:02:18.0728776Z   ✓  49 [chromium] › test/e2e/logout.e2e.test.ts:69:3 › Esc menu › Resume closes menu and re-engages movement without navigating (6.4s)
2026-05-17T05:02:23.7612755Z   ✘  50 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (5.3s)
2026-05-17T05:02:42.7410254Z   ✘  51 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (retry #1) (18.0s)
2026-05-17T05:02:47.6599478Z   ✓  52 [chromium] › test/e2e/sprite-state.e2e.test.ts:48:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate DOM mirror is visible for self (count >= 1) (4.2s)
2026-05-17T05:02:51.8536125Z   ✓  53 [chromium] › test/e2e/sprite-state.e2e.test.ts:61:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate text content matches logged-in username (4.2s)
2026-05-17T05:03:00.5365091Z   ✓  54 [chromium] › test/e2e/ws-kill-reconnect.e2e.test.ts:16:1 › WS-kill: login → kill WS → SDK reconnects within grace → canvas still truthy + chat round-trips (8.6s)
2026-05-17T05:03:00.6000706Z 
2026-05-17T05:03:00.6009007Z 
2026-05-17T05:03:00.6028811Z   1) [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-17T05:03:00.6029982Z 
2026-05-17T05:03:00.6030733Z     Error: Camera did not pan: before=(120,160) after=(120,160)
2026-05-17T05:03:00.6031456Z 
2026-05-17T05:03:00.6032423Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6033232Z 
2026-05-17T05:03:00.6033652Z     Expected: >= [32m8[39m
2026-05-17T05:03:00.6034513Z     Received:    [31m0[39m
2026-05-17T05:03:00.6034925Z 
2026-05-17T05:03:00.6035237Z       80 |     cameraDelta,
2026-05-17T05:03:00.6036316Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-17T05:03:00.6037741Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-17T05:03:00.6038347Z          |     ^
2026-05-17T05:03:00.6038839Z       83 |
2026-05-17T05:03:00.6039604Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-17T05:03:00.6040693Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-17T05:03:00.6041918Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-17T05:03:00.6042676Z 
2026-05-17T05:03:00.6043615Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6045357Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/test-failed-1.png
2026-05-17T05:03:00.6046934Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6047608Z 
2026-05-17T05:03:00.6048486Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6049873Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/video.webm
2026-05-17T05:03:00.6051478Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6052130Z 
2026-05-17T05:03:00.6053082Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/error-context.md
2026-05-17T05:03:00.6054336Z 
2026-05-17T05:03:00.6055277Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6057024Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-17T05:03:00.6058058Z     Usage:
2026-05-17T05:03:00.6058420Z 
2026-05-17T05:03:00.6059447Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-17T05:03:00.6060570Z 
2026-05-17T05:03:00.6061411Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6062149Z 
2026-05-17T05:03:00.6062951Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6063720Z 
2026-05-17T05:03:00.6065120Z     Error: Camera did not pan: before=(120,160) after=(120,160)
2026-05-17T05:03:00.6070464Z 
2026-05-17T05:03:00.6071418Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6072385Z 
2026-05-17T05:03:00.6072871Z     Expected: >= [32m8[39m
2026-05-17T05:03:00.6073513Z     Received:    [31m0[39m
2026-05-17T05:03:00.6074150Z 
2026-05-17T05:03:00.6074484Z       80 |     cameraDelta,
2026-05-17T05:03:00.6075517Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-17T05:03:00.6076890Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-17T05:03:00.6077537Z          |     ^
2026-05-17T05:03:00.6078047Z       83 |
2026-05-17T05:03:00.6078792Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-17T05:03:00.6079833Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-17T05:03:00.6080971Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-17T05:03:00.6081720Z 
2026-05-17T05:03:00.6082956Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6084745Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6086449Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6087149Z 
2026-05-17T05:03:00.6088023Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6089492Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/video.webm
2026-05-17T05:03:00.6091076Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6091752Z 
2026-05-17T05:03:00.6092767Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/error-context.md
2026-05-17T05:03:00.6094078Z 
2026-05-17T05:03:00.6095130Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6096829Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-17T05:03:00.6097886Z     Usage:
2026-05-17T05:03:00.6098238Z 
2026-05-17T05:03:00.6099327Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-17T05:03:00.6100431Z 
2026-05-17T05:03:00.6101233Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6101915Z 
2026-05-17T05:03:00.6103168Z   2) [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-17T05:03:00.6104444Z 
2026-05-17T05:03:00.6107910Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 1 (samples=0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000)
2026-05-17T05:03:00.6110862Z 
2026-05-17T05:03:00.6111843Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6112907Z 
2026-05-17T05:03:00.6113305Z     Expected: >= [32m3[39m
2026-05-17T05:03:00.6114124Z     Received:    [31m1[39m
2026-05-17T05:03:00.6114542Z 
2026-05-17T05:03:00.6114864Z       67 |     unique.size,
2026-05-17T05:03:00.6116102Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-17T05:03:00.6117206Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-17T05:03:00.6117820Z          |     ^
2026-05-17T05:03:00.6118307Z       70 |
2026-05-17T05:03:00.6119038Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-17T05:03:00.6119917Z       72 |   for (const f of unique) {
2026-05-17T05:03:00.6120852Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-17T05:03:00.6121576Z 
2026-05-17T05:03:00.6122425Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6124034Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-17T05:03:00.6125556Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6126207Z 
2026-05-17T05:03:00.6127023Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6128426Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/video.webm
2026-05-17T05:03:00.6129862Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6130516Z 
2026-05-17T05:03:00.6131383Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-17T05:03:00.6132248Z 
2026-05-17T05:03:00.6132978Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6134479Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-17T05:03:00.6135508Z     Usage:
2026-05-17T05:03:00.6135868Z 
2026-05-17T05:03:00.6136892Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-17T05:03:00.6138047Z 
2026-05-17T05:03:00.6138841Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6139454Z 
2026-05-17T05:03:00.6140145Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6141029Z 
2026-05-17T05:03:00.6144661Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 1 (samples=0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000)
2026-05-17T05:03:00.6147890Z 
2026-05-17T05:03:00.6148841Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6149649Z 
2026-05-17T05:03:00.6150000Z     Expected: >= [32m3[39m
2026-05-17T05:03:00.6150666Z     Received:    [31m1[39m
2026-05-17T05:03:00.6151043Z 
2026-05-17T05:03:00.6151324Z       67 |     unique.size,
2026-05-17T05:03:00.6152484Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-17T05:03:00.6153578Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-17T05:03:00.6154350Z          |     ^
2026-05-17T05:03:00.6154810Z       70 |
2026-05-17T05:03:00.6155493Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-17T05:03:00.6156329Z       72 |   for (const f of unique) {
2026-05-17T05:03:00.6157248Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-17T05:03:00.6157951Z 
2026-05-17T05:03:00.6158839Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6160253Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6161912Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6162522Z 
2026-05-17T05:03:00.6163311Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6164883Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-17T05:03:00.6166408Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6167036Z 
2026-05-17T05:03:00.6167966Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-17T05:03:00.6168896Z 
2026-05-17T05:03:00.6169830Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6171153Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-17T05:03:00.6172136Z     Usage:
2026-05-17T05:03:00.6172416Z 
2026-05-17T05:03:00.6173417Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-17T05:03:00.6175033Z 
2026-05-17T05:03:00.6175830Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6176463Z 
2026-05-17T05:03:00.6177614Z   3) [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-17T05:03:00.6178913Z 
2026-05-17T05:03:00.6179377Z     Error: Camera scrollX did not advance: before=120 after=120
2026-05-17T05:03:00.6179931Z 
2026-05-17T05:03:00.6180739Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6181460Z 
2026-05-17T05:03:00.6181829Z     Expected: > [32m15[39m
2026-05-17T05:03:00.6182428Z     Received:   [31m0[39m
2026-05-17T05:03:00.6182804Z 
2026-05-17T05:03:00.6183183Z       83 |     (after as number) - (before as number),
2026-05-17T05:03:00.6184268Z       84 |     `Camera scrollX did not advance: before=${before} after=${after}`,
2026-05-17T05:03:00.6185046Z     > 85 |   ).toBeGreaterThan(15);
2026-05-17T05:03:00.6185528Z          |     ^
2026-05-17T05:03:00.6185960Z       86 | });
2026-05-17T05:03:00.6186374Z       87 |
2026-05-17T05:03:00.6187123Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:85:5
2026-05-17T05:03:00.6187812Z 
2026-05-17T05:03:00.6188623Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6189977Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-17T05:03:00.6191408Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6192000Z 
2026-05-17T05:03:00.6192779Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6194209Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/video.webm
2026-05-17T05:03:00.6195521Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6196033Z 
2026-05-17T05:03:00.6196862Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-17T05:03:00.6197781Z 
2026-05-17T05:03:00.6198594Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6199894Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-17T05:03:00.6200796Z     Usage:
2026-05-17T05:03:00.6201085Z 
2026-05-17T05:03:00.6202006Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-17T05:03:00.6202866Z 
2026-05-17T05:03:00.6203590Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6204635Z 
2026-05-17T05:03:00.6205336Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6205920Z 
2026-05-17T05:03:00.6206317Z     Error: Camera scrollX did not advance: before=120 after=120
2026-05-17T05:03:00.6207010Z 
2026-05-17T05:03:00.6207720Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6208413Z 
2026-05-17T05:03:00.6208748Z     Expected: > [32m15[39m
2026-05-17T05:03:00.6209297Z     Received:   [31m0[39m
2026-05-17T05:03:00.6209647Z 
2026-05-17T05:03:00.6209995Z       83 |     (after as number) - (before as number),
2026-05-17T05:03:00.6210811Z       84 |     `Camera scrollX did not advance: before=${before} after=${after}`,
2026-05-17T05:03:00.6211711Z     > 85 |   ).toBeGreaterThan(15);
2026-05-17T05:03:00.6212245Z          |     ^
2026-05-17T05:03:00.6212661Z       86 | });
2026-05-17T05:03:00.6213080Z       87 |
2026-05-17T05:03:00.6214045Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:85:5
2026-05-17T05:03:00.6214771Z 
2026-05-17T05:03:00.6215617Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6216966Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6218491Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6219115Z 
2026-05-17T05:03:00.6219871Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6221147Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-17T05:03:00.6222548Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6223328Z 
2026-05-17T05:03:00.6224430Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-17T05:03:00.6225383Z 
2026-05-17T05:03:00.6226156Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6227467Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-17T05:03:00.6228358Z     Usage:
2026-05-17T05:03:00.6228654Z 
2026-05-17T05:03:00.6229673Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-17T05:03:00.6230692Z 
2026-05-17T05:03:00.6231417Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6232021Z 
2026-05-17T05:03:00.6233133Z   4) [chromium] › test/e2e/cli-08-ghost-run-disconnect.spec.ts:21:1 › disconnect while moving: observer does not see stale remote cardinal run 
2026-05-17T05:03:00.6234398Z 
2026-05-17T05:03:00.6234940Z     Error: remote should be removed from observer state after reconnect grace expires
2026-05-17T05:03:00.6235553Z 
2026-05-17T05:03:00.6236347Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-17T05:03:00.6237279Z 
2026-05-17T05:03:00.6237581Z     Expected: [32mtrue[39m
2026-05-17T05:03:00.6238125Z     Received: [31mfalse[39m
2026-05-17T05:03:00.6238464Z 
2026-05-17T05:03:00.6238773Z       67 |       tail.every((s) => s.x === null),
2026-05-17T05:03:00.6239624Z       68 |       'remote should be removed from observer state after reconnect grace expires',
2026-05-17T05:03:00.6240387Z     > 69 |     ).toBe(true);
2026-05-17T05:03:00.6240856Z          |       ^
2026-05-17T05:03:00.6241275Z       70 |   } finally {
2026-05-17T05:03:00.6241805Z       71 |     await ctxA.close().catch(() => {});
2026-05-17T05:03:00.6242397Z       72 |     await ctxB.close();
2026-05-17T05:03:00.6243322Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-ghost-run-disconnect.spec.ts:69:7
2026-05-17T05:03:00.6244202Z 
2026-05-17T05:03:00.6244953Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6246282Z     test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium/test-failed-1.png
2026-05-17T05:03:00.6247674Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6248248Z 
2026-05-17T05:03:00.6248960Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6250328Z     test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium/test-failed-2.png
2026-05-17T05:03:00.6252006Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6252864Z 
2026-05-17T05:03:00.6253681Z     Error Context: test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium/error-context.md
2026-05-17T05:03:00.6254736Z 
2026-05-17T05:03:00.6255510Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6256808Z     test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium/trace.zip
2026-05-17T05:03:00.6257722Z     Usage:
2026-05-17T05:03:00.6258001Z 
2026-05-17T05:03:00.6258900Z         pnpm exec playwright show-trace test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium/trace.zip
2026-05-17T05:03:00.6259824Z 
2026-05-17T05:03:00.6260515Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6261070Z 
2026-05-17T05:03:00.6261733Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6262301Z 
2026-05-17T05:03:00.6262859Z     Error: remote should be removed from observer state after reconnect grace expires
2026-05-17T05:03:00.6263467Z 
2026-05-17T05:03:00.6264412Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-17T05:03:00.6265131Z 
2026-05-17T05:03:00.6265619Z     Expected: [32mtrue[39m
2026-05-17T05:03:00.6266156Z     Received: [31mfalse[39m
2026-05-17T05:03:00.6266492Z 
2026-05-17T05:03:00.6266798Z       67 |       tail.every((s) => s.x === null),
2026-05-17T05:03:00.6267658Z       68 |       'remote should be removed from observer state after reconnect grace expires',
2026-05-17T05:03:00.6268421Z     > 69 |     ).toBe(true);
2026-05-17T05:03:00.6268873Z          |       ^
2026-05-17T05:03:00.6269290Z       70 |   } finally {
2026-05-17T05:03:00.6269809Z       71 |     await ctxA.close().catch(() => {});
2026-05-17T05:03:00.6270397Z       72 |     await ctxB.close();
2026-05-17T05:03:00.6271324Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-ghost-run-disconnect.spec.ts:69:7
2026-05-17T05:03:00.6272067Z 
2026-05-17T05:03:00.6272810Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6274319Z     test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6275809Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6276375Z 
2026-05-17T05:03:00.6277093Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6278450Z     test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium-retry1/test-failed-2.png
2026-05-17T05:03:00.6279883Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6280434Z 
2026-05-17T05:03:00.6281339Z     Error Context: test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium-retry1/error-context.md
2026-05-17T05:03:00.6282485Z 
2026-05-17T05:03:00.6283230Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6284668Z     test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium-retry1/trace.zip
2026-05-17T05:03:00.6285640Z     Usage:
2026-05-17T05:03:00.6285902Z 
2026-05-17T05:03:00.6286878Z         pnpm exec playwright show-trace test-results/cli-08-ghost-run-disconnec-26509-e-stale-remote-cardinal-run-chromium-retry1/trace.zip
2026-05-17T05:03:00.6287894Z 
2026-05-17T05:03:00.6288706Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6289257Z 
2026-05-17T05:03:00.6290312Z   5) [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) 
2026-05-17T05:03:00.6291221Z 
2026-05-17T05:03:00.6295901Z     Error: D-41 regression: expected ≥3 distinct localFrame keys during 1s KeyD hold; observed 1 (samples=[0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000]). Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.
2026-05-17T05:03:00.6299588Z 
2026-05-17T05:03:00.6300404Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6301124Z 
2026-05-17T05:03:00.6301407Z     Expected: >= [32m3[39m
2026-05-17T05:03:00.6301923Z     Received:    [31m1[39m
2026-05-17T05:03:00.6302249Z 
2026-05-17T05:03:00.6302696Z       83 |       `observed ${unique.size} (samples=[${samples.join(',')}]). ` +
2026-05-17T05:03:00.6304084Z       84 |       `Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.`,
2026-05-17T05:03:00.6305026Z     > 85 |   ).toBeGreaterThanOrEqual(3);
2026-05-17T05:03:00.6305547Z          |     ^
2026-05-17T05:03:00.6305949Z       86 |
2026-05-17T05:03:00.6306826Z       87 |   // 5. At least one observed frame key must contain 'Run' — confirms we left Stand state.
2026-05-17T05:03:00.6307820Z       88 |   const hasRunFrame = [...unique].some((f) => f.includes('Run'));
2026-05-17T05:03:00.6308869Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-local-anim.e2e.test.ts:85:5
2026-05-17T05:03:00.6309549Z 
2026-05-17T05:03:00.6310284Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6311566Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/test-failed-1.png
2026-05-17T05:03:00.6312945Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6313492Z 
2026-05-17T05:03:00.6314323Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6315481Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/video.webm
2026-05-17T05:03:00.6316915Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6317472Z 
2026-05-17T05:03:00.6318309Z     Error Context: test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/error-context.md
2026-05-17T05:03:00.6319180Z 
2026-05-17T05:03:00.6319972Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6321312Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/trace.zip
2026-05-17T05:03:00.6322450Z     Usage:
2026-05-17T05:03:00.6322726Z 
2026-05-17T05:03:00.6323643Z         pnpm exec playwright show-trace test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/trace.zip
2026-05-17T05:03:00.6324835Z 
2026-05-17T05:03:00.6325569Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6326487Z 
2026-05-17T05:03:00.6327203Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6327800Z 
2026-05-17T05:03:00.6332390Z     Error: D-41 regression: expected ≥3 distinct localFrame keys during 1s KeyD hold; observed 1 (samples=[0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000]). Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.
2026-05-17T05:03:00.6336018Z 
2026-05-17T05:03:00.6336865Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6337660Z 
2026-05-17T05:03:00.6337976Z     Expected: >= [32m3[39m
2026-05-17T05:03:00.6338497Z     Received:    [31m1[39m
2026-05-17T05:03:00.6338822Z 
2026-05-17T05:03:00.6339298Z       83 |       `observed ${unique.size} (samples=[${samples.join(',')}]). ` +
2026-05-17T05:03:00.6340564Z       84 |       `Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.`,
2026-05-17T05:03:00.6341470Z     > 85 |   ).toBeGreaterThanOrEqual(3);
2026-05-17T05:03:00.6342020Z          |     ^
2026-05-17T05:03:00.6342421Z       86 |
2026-05-17T05:03:00.6343309Z       87 |   // 5. At least one observed frame key must contain 'Run' — confirms we left Stand state.
2026-05-17T05:03:00.6344502Z       88 |   const hasRunFrame = [...unique].some((f) => f.includes('Run'));
2026-05-17T05:03:00.6345508Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-local-anim.e2e.test.ts:85:5
2026-05-17T05:03:00.6346165Z 
2026-05-17T05:03:00.6346970Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6348359Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6349761Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6350381Z 
2026-05-17T05:03:00.6351044Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6352201Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/video.webm
2026-05-17T05:03:00.6353455Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6354457Z 
2026-05-17T05:03:00.6355297Z     Error Context: test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/error-context.md
2026-05-17T05:03:00.6356157Z 
2026-05-17T05:03:00.6357016Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6358177Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/trace.zip
2026-05-17T05:03:00.6359034Z     Usage:
2026-05-17T05:03:00.6359292Z 
2026-05-17T05:03:00.6360178Z         pnpm exec playwright show-trace test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/trace.zip
2026-05-17T05:03:00.6361099Z 
2026-05-17T05:03:00.6361707Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6362232Z 
2026-05-17T05:03:00.6363529Z   6) [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-17T05:03:00.6364742Z 
2026-05-17T05:03:00.6365543Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoContain[2m([22m[32mexpected[39m[2m) // indexOf[22m
2026-05-17T05:03:00.6366295Z 
2026-05-17T05:03:00.6366674Z     Expected value: [32m"mvp"[39m
2026-05-17T05:03:00.6367852Z     Received array: [31m["atlas-mvp", "16d6dc9b-834f-418b-89f2-3bdecceccaba", "4778a4f0-8718-4829-92aa-7b6979327143"][39m
2026-05-17T05:03:00.6368659Z 
2026-05-17T05:03:00.6368889Z       87 |   );
2026-05-17T05:03:00.6369570Z       88 |   // The 'mvp' atlas is loaded by BootScene on the cookie reload path (06-14).
2026-05-17T05:03:00.6370390Z     > 89 |   expect(loadedTextures).toContain('mvp');
2026-05-17T05:03:00.6371012Z          |                          ^
2026-05-17T05:03:00.6371567Z       90 |
2026-05-17T05:03:00.6372347Z       91 |   // 5. Chat round-trip: send a message and assert the chat line appears.
2026-05-17T05:03:00.6373150Z       92 |   await page.keyboard.press('Enter');
2026-05-17T05:03:00.6374302Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-resume-render.spec.ts:89:26
2026-05-17T05:03:00.6375000Z 
2026-05-17T05:03:00.6375786Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6377112Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/test-failed-1.png
2026-05-17T05:03:00.6378515Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6379109Z 
2026-05-17T05:03:00.6379874Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6381133Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/video.webm
2026-05-17T05:03:00.6382771Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6383378Z 
2026-05-17T05:03:00.6384351Z     Error Context: test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/error-context.md
2026-05-17T05:03:00.6385346Z 
2026-05-17T05:03:00.6399337Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6401499Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/trace.zip
2026-05-17T05:03:00.6402384Z     Usage:
2026-05-17T05:03:00.6402649Z 
2026-05-17T05:03:00.6403523Z         pnpm exec playwright show-trace test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/trace.zip
2026-05-17T05:03:00.6404782Z 
2026-05-17T05:03:00.6405489Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6406045Z 
2026-05-17T05:03:00.6406742Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6407276Z 
2026-05-17T05:03:00.6407916Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:00.6408517Z 
2026-05-17T05:03:00.6408877Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-17T05:03:00.6409484Z     Expected: visible
2026-05-17T05:03:00.6409922Z     Timeout: 15000ms
2026-05-17T05:03:00.6410386Z     Error: element(s) not found
2026-05-17T05:03:00.6410726Z 
2026-05-17T05:03:00.6410947Z     Call log:
2026-05-17T05:03:00.6411569Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-17T05:03:00.6412428Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-17T05:03:00.6412939Z 
2026-05-17T05:03:00.6413036Z 
2026-05-17T05:03:00.6413270Z        at fixtures.ts:172
2026-05-17T05:03:00.6413588Z 
2026-05-17T05:03:00.6413992Z       170 |  */
2026-05-17T05:03:00.6414650Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-17T05:03:00.6415617Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-17T05:03:00.6416433Z           |                                                                ^
2026-05-17T05:03:00.6417039Z       173 |     timeout: 15_000,
2026-05-17T05:03:00.6417497Z       174 |   });
2026-05-17T05:03:00.6417885Z       175 | }
2026-05-17T05:03:00.6418629Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-17T05:03:00.6419752Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-resume-render.spec.ts:37:9
2026-05-17T05:03:00.6420426Z 
2026-05-17T05:03:00.6421147Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6422476Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6424402Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6424948Z 
2026-05-17T05:03:00.6425753Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6427028Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/video.webm
2026-05-17T05:03:00.6428362Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6428879Z 
2026-05-17T05:03:00.6429762Z     Error Context: test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/error-context.md
2026-05-17T05:03:00.6430696Z 
2026-05-17T05:03:00.6431398Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6432645Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-17T05:03:00.6433589Z     Usage:
2026-05-17T05:03:00.6434015Z 
2026-05-17T05:03:00.6434956Z         pnpm exec playwright show-trace test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-17T05:03:00.6435915Z 
2026-05-17T05:03:00.6436551Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6437363Z 
2026-05-17T05:03:00.6438508Z   7) [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) 
2026-05-17T05:03:00.6439486Z 
2026-05-17T05:03:00.6440567Z     Error: Expected ≥3 firstRemoteFrame samples on B during 1s window (telemetry must publish — PlayerRenderer.onSimulationTickRemote at 30 Hz).
2026-05-17T05:03:00.6441525Z 
2026-05-17T05:03:00.6442284Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6442983Z 
2026-05-17T05:03:00.6443292Z     Expected: >= [32m3[39m
2026-05-17T05:03:00.6443948Z     Received:    [31m2[39m
2026-05-17T05:03:00.6444256Z 
2026-05-17T05:03:00.6444893Z       106 |       'Expected ≥3 firstRemoteFrame samples on B during 1s window (telemetry ' +
2026-05-17T05:03:00.6445998Z       107 |         'must publish — PlayerRenderer.onSimulationTickRemote at 30 Hz).',
2026-05-17T05:03:00.6446785Z     > 108 |     ).toBeGreaterThanOrEqual(3);
2026-05-17T05:03:00.6447303Z           |       ^
2026-05-17T05:03:00.6448008Z       109 |     const teleInSamplesB = samplesB.filter((f) => TELEPORT_FRAME_REGEX.test(f));
2026-05-17T05:03:00.6448749Z       110 |     expect(
2026-05-17T05:03:00.6449257Z       111 |       teleInSamplesB,
2026-05-17T05:03:00.6450237Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:108:7
2026-05-17T05:03:00.6450974Z 
2026-05-17T05:03:00.6451705Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6453144Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/test-failed-1.png
2026-05-17T05:03:00.6454648Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6455208Z 
2026-05-17T05:03:00.6455927Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6457189Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/test-failed-2.png
2026-05-17T05:03:00.6458572Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6459095Z 
2026-05-17T05:03:00.6459909Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/error-context.md
2026-05-17T05:03:00.6460757Z 
2026-05-17T05:03:00.6461442Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6462715Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/trace.zip
2026-05-17T05:03:00.6463590Z     Usage:
2026-05-17T05:03:00.6464003Z 
2026-05-17T05:03:00.6464856Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/trace.zip
2026-05-17T05:03:00.6465977Z 
2026-05-17T05:03:00.6466622Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6467153Z 
2026-05-17T05:03:00.6467784Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6468315Z 
2026-05-17T05:03:00.6468953Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:00.6469534Z 
2026-05-17T05:03:00.6469883Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-17T05:03:00.6470448Z     Expected: visible
2026-05-17T05:03:00.6470894Z     Timeout: 15000ms
2026-05-17T05:03:00.6471361Z     Error: element(s) not found
2026-05-17T05:03:00.6471691Z 
2026-05-17T05:03:00.6471909Z     Call log:
2026-05-17T05:03:00.6472520Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-17T05:03:00.6473372Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-17T05:03:00.6474049Z 
2026-05-17T05:03:00.6474146Z 
2026-05-17T05:03:00.6474386Z        at fixtures.ts:172
2026-05-17T05:03:00.6474698Z 
2026-05-17T05:03:00.6474916Z       170 |  */
2026-05-17T05:03:00.6475563Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-17T05:03:00.6476494Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-17T05:03:00.6477333Z           |                                                                ^
2026-05-17T05:03:00.6477932Z       173 |     timeout: 15_000,
2026-05-17T05:03:00.6478390Z       174 |   });
2026-05-17T05:03:00.6478783Z       175 | }
2026-05-17T05:03:00.6479770Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-17T05:03:00.6481018Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:91:11
2026-05-17T05:03:00.6481717Z 
2026-05-17T05:03:00.6482439Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6483745Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6485273Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6485818Z 
2026-05-17T05:03:00.6486527Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6487876Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/test-failed-2.png
2026-05-17T05:03:00.6489261Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6489795Z 
2026-05-17T05:03:00.6490673Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/error-context.md
2026-05-17T05:03:00.6491582Z 
2026-05-17T05:03:00.6492489Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6493738Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/trace.zip
2026-05-17T05:03:00.6494815Z     Usage:
2026-05-17T05:03:00.6495073Z 
2026-05-17T05:03:00.6496020Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/trace.zip
2026-05-17T05:03:00.6496998Z 
2026-05-17T05:03:00.6497635Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6498155Z 
2026-05-17T05:03:00.6499476Z   8) [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) 
2026-05-17T05:03:00.6500568Z 
2026-05-17T05:03:00.6502159Z     Error: Expected ≥3 firstRemoteFrame samples on A during 800 ms window (telemetry must publish — PlayerRenderer.startTeleportAnim onUpdate AND onSimulationTickRemote both write the field).
2026-05-17T05:03:00.6503443Z 
2026-05-17T05:03:00.6504365Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6505091Z 
2026-05-17T05:03:00.6505397Z     Expected: >= [32m3[39m
2026-05-17T05:03:00.6505920Z     Received:    [31m2[39m
2026-05-17T05:03:00.6506252Z 
2026-05-17T05:03:00.6506898Z       186 |         '(telemetry must publish — PlayerRenderer.startTeleportAnim onUpdate ' +
2026-05-17T05:03:00.6507841Z       187 |         'AND onSimulationTickRemote both write the field).',
2026-05-17T05:03:00.6508766Z     > 188 |     ).toBeGreaterThanOrEqual(3);
2026-05-17T05:03:00.6509292Z           |       ^
2026-05-17T05:03:00.6510013Z       189 |     const teleInSamplesA = samplesA.filter((f) => TELEPORT_FRAME_REGEX.test(f));
2026-05-17T05:03:00.6510760Z       190 |     expect(
2026-05-17T05:03:00.6511272Z       191 |       teleInSamplesA.length,
2026-05-17T05:03:00.6512227Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:188:7
2026-05-17T05:03:00.6512958Z 
2026-05-17T05:03:00.6513702Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6515298Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/test-failed-1.png
2026-05-17T05:03:00.6516714Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6517289Z 
2026-05-17T05:03:00.6517997Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6519328Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/test-failed-2.png
2026-05-17T05:03:00.6520690Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6521457Z 
2026-05-17T05:03:00.6522292Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/error-context.md
2026-05-17T05:03:00.6523193Z 
2026-05-17T05:03:00.6524067Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6525293Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/trace.zip
2026-05-17T05:03:00.6526189Z     Usage:
2026-05-17T05:03:00.6526443Z 
2026-05-17T05:03:00.6527373Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/trace.zip
2026-05-17T05:03:00.6528347Z 
2026-05-17T05:03:00.6529006Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6529547Z 
2026-05-17T05:03:00.6530196Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6530728Z 
2026-05-17T05:03:00.6531356Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:00.6531942Z 
2026-05-17T05:03:00.6532278Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-17T05:03:00.6532846Z     Expected: visible
2026-05-17T05:03:00.6533274Z     Timeout: 15000ms
2026-05-17T05:03:00.6533734Z     Error: element(s) not found
2026-05-17T05:03:00.6534211Z 
2026-05-17T05:03:00.6534435Z     Call log:
2026-05-17T05:03:00.6535040Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-17T05:03:00.6535886Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-17T05:03:00.6536571Z 
2026-05-17T05:03:00.6536665Z 
2026-05-17T05:03:00.6536899Z        at fixtures.ts:172
2026-05-17T05:03:00.6537207Z 
2026-05-17T05:03:00.6537416Z       170 |  */
2026-05-17T05:03:00.6538052Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-17T05:03:00.6539017Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-17T05:03:00.6539853Z           |                                                                ^
2026-05-17T05:03:00.6540430Z       173 |     timeout: 15_000,
2026-05-17T05:03:00.6540877Z       174 |   });
2026-05-17T05:03:00.6541260Z       175 | }
2026-05-17T05:03:00.6542023Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-17T05:03:00.6543331Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:176:11
2026-05-17T05:03:00.6544200Z 
2026-05-17T05:03:00.6544913Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6546226Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6547583Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6548306Z 
2026-05-17T05:03:00.6549030Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6550399Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/test-failed-2.png
2026-05-17T05:03:00.6551825Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6552347Z 
2026-05-17T05:03:00.6553221Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/error-context.md
2026-05-17T05:03:00.6554265Z 
2026-05-17T05:03:00.6554965Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6556228Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/trace.zip
2026-05-17T05:03:00.6557149Z     Usage:
2026-05-17T05:03:00.6557399Z 
2026-05-17T05:03:00.6558347Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/trace.zip
2026-05-17T05:03:00.6559368Z 
2026-05-17T05:03:00.6560031Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6560565Z 
2026-05-17T05:03:00.6561545Z   9) [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-17T05:03:00.6562417Z 
2026-05-17T05:03:00.6563119Z     Error: RoomRenderer.renderNew must emit floor tile sprites for mvp-room (D-40 verify-bail flip / Plan 06.1-05)
2026-05-17T05:03:00.6564025Z 
2026-05-17T05:03:00.6564909Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6565556Z 
2026-05-17T05:03:00.6565832Z     Expected: > [32m0[39m
2026-05-17T05:03:00.6566335Z     Received:   [31m0[39m
2026-05-17T05:03:00.6566630Z 
2026-05-17T05:03:00.6566862Z     Call Log:
2026-05-17T05:03:00.6567413Z     - Timeout 15000ms exceeded while waiting on the predicate
2026-05-17T05:03:00.6567896Z 
2026-05-17T05:03:00.6568406Z       55 |   //    once RoomRenderer.renderNew (Plan 06.1-05) has placed at least one tile
2026-05-17T05:03:00.6569400Z       56 |   //    via group.add(). mvp-room ships 324 tiles, so any positive count clears.
2026-05-17T05:03:00.6570083Z     > 57 |   await expect
2026-05-17T05:03:00.6570511Z          |   ^
2026-05-17T05:03:00.6570899Z       58 |     .poll(
2026-05-17T05:03:00.6571324Z       59 |       async () =>
2026-05-17T05:03:00.6571811Z       60 |         page.evaluate(
2026-05-17T05:03:00.6572601Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:57:3
2026-05-17T05:03:00.6573224Z 
2026-05-17T05:03:00.6574064Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6575301Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-17T05:03:00.6576795Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6577312Z 
2026-05-17T05:03:00.6577980Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6579111Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/video.webm
2026-05-17T05:03:00.6580490Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6581023Z 
2026-05-17T05:03:00.6581789Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-17T05:03:00.6582614Z 
2026-05-17T05:03:00.6583309Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6584640Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-17T05:03:00.6585476Z     Usage:
2026-05-17T05:03:00.6585720Z 
2026-05-17T05:03:00.6586569Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-17T05:03:00.6587457Z 
2026-05-17T05:03:00.6588092Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6588601Z 
2026-05-17T05:03:00.6589221Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6589751Z 
2026-05-17T05:03:00.6590439Z     Error: RoomRenderer.renderNew must emit floor tile sprites for mvp-room (D-40 verify-bail flip / Plan 06.1-05)
2026-05-17T05:03:00.6591379Z 
2026-05-17T05:03:00.6592081Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6592743Z 
2026-05-17T05:03:00.6593020Z     Expected: > [32m0[39m
2026-05-17T05:03:00.6593535Z     Received:   [31m0[39m
2026-05-17T05:03:00.6593989Z 
2026-05-17T05:03:00.6594198Z     Call Log:
2026-05-17T05:03:00.6594763Z     - Timeout 15000ms exceeded while waiting on the predicate
2026-05-17T05:03:00.6595218Z 
2026-05-17T05:03:00.6595720Z       55 |   //    once RoomRenderer.renderNew (Plan 06.1-05) has placed at least one tile
2026-05-17T05:03:00.6596693Z       56 |   //    via group.add(). mvp-room ships 324 tiles, so any positive count clears.
2026-05-17T05:03:00.6597394Z     > 57 |   await expect
2026-05-17T05:03:00.6597819Z          |   ^
2026-05-17T05:03:00.6598202Z       58 |     .poll(
2026-05-17T05:03:00.6598615Z       59 |       async () =>
2026-05-17T05:03:00.6599104Z       60 |         page.evaluate(
2026-05-17T05:03:00.6599895Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:57:3
2026-05-17T05:03:00.6600510Z 
2026-05-17T05:03:00.6601209Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6602657Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6604120Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6604670Z 
2026-05-17T05:03:00.6605363Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6606591Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-17T05:03:00.6607948Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6608533Z 
2026-05-17T05:03:00.6609391Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-17T05:03:00.6610295Z 
2026-05-17T05:03:00.6611030Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6612289Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-17T05:03:00.6613185Z     Usage:
2026-05-17T05:03:00.6613456Z 
2026-05-17T05:03:00.6614530Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-17T05:03:00.6615515Z 
2026-05-17T05:03:00.6616280Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6616829Z 
2026-05-17T05:03:00.6617790Z   10) [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-17T05:03:00.6618916Z 
2026-05-17T05:03:00.6619710Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6620413Z 
2026-05-17T05:03:00.6620704Z     Expected: > [32m470[39m
2026-05-17T05:03:00.6621248Z     Received:   [31m440[39m
2026-05-17T05:03:00.6621578Z 
2026-05-17T05:03:00.6621882Z       78 |       .getAttribute('data-x-coord');
2026-05-17T05:03:00.6622533Z       79 |     const afterX = Number(afterXStr ?? '0');
2026-05-17T05:03:00.6623559Z     > 80 |     expect(afterX).toBeGreaterThan(beforeX + 30); // ≥30 px movement; conservative.
2026-05-17T05:03:00.6624496Z          |                    ^
2026-05-17T05:03:00.6624930Z       81 |
2026-05-17T05:03:00.6625581Z       82 |     // (4) Chat round-trip. A presses Enter to focus chat, types, Enter to send.
2026-05-17T05:03:00.6626499Z       83 |     //     B sees a `.chat-line` matching `<sender>: <text>` within 5s.
2026-05-17T05:03:00.6627427Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:80:20
2026-05-17T05:03:00.6628009Z 
2026-05-17T05:03:00.6628739Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6629980Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-1.png
2026-05-17T05:03:00.6631494Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6632049Z 
2026-05-17T05:03:00.6632745Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6634087Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-2.png
2026-05-17T05:03:00.6635397Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6635924Z 
2026-05-17T05:03:00.6636746Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/error-context.md
2026-05-17T05:03:00.6637595Z 
2026-05-17T05:03:00.6638300Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6639456Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-17T05:03:00.6640323Z     Usage:
2026-05-17T05:03:00.6640587Z 
2026-05-17T05:03:00.6641471Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-17T05:03:00.6642371Z 
2026-05-17T05:03:00.6643006Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6643517Z 
2026-05-17T05:03:00.6644291Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6644834Z 
2026-05-17T05:03:00.6645572Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:00.6646526Z 
2026-05-17T05:03:00.6646813Z     Expected: > [32m470[39m
2026-05-17T05:03:00.6647319Z     Received:   [31m440[39m
2026-05-17T05:03:00.6647636Z 
2026-05-17T05:03:00.6647954Z       78 |       .getAttribute('data-x-coord');
2026-05-17T05:03:00.6648588Z       79 |     const afterX = Number(afterXStr ?? '0');
2026-05-17T05:03:00.6649543Z     > 80 |     expect(afterX).toBeGreaterThan(beforeX + 30); // ≥30 px movement; conservative.
2026-05-17T05:03:00.6650386Z          |                    ^
2026-05-17T05:03:00.6650829Z       81 |
2026-05-17T05:03:00.6651468Z       82 |     // (4) Chat round-trip. A presses Enter to focus chat, types, Enter to send.
2026-05-17T05:03:00.6652356Z       83 |     //     B sees a `.chat-line` matching `<sender>: <text>` within 5s.
2026-05-17T05:03:00.6653267Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:80:20
2026-05-17T05:03:00.6653992Z 
2026-05-17T05:03:00.6654790Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6656118Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-1.png
2026-05-17T05:03:00.6657496Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6658206Z 
2026-05-17T05:03:00.6658896Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:00.6660144Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-2.png
2026-05-17T05:03:00.6661523Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6662033Z 
2026-05-17T05:03:00.6662859Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/error-context.md
2026-05-17T05:03:00.6663774Z 
2026-05-17T05:03:00.6664605Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:00.6665823Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-17T05:03:00.6666752Z     Usage:
2026-05-17T05:03:00.6667010Z 
2026-05-17T05:03:00.6667920Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-17T05:03:00.6668900Z 
2026-05-17T05:03:00.6669545Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:00.6670089Z 
2026-05-17T05:03:01.4456115Z   11) [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-17T05:03:01.4474263Z 
2026-05-17T05:03:01.4494896Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:01.4534153Z 
2026-05-17T05:03:01.4574502Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-17T05:03:01.4594252Z     Expected: visible
2026-05-17T05:03:01.4614760Z     Error: strict mode violation: locator('form#login-form, #login-form, #username') resolved to 2 elements:
2026-05-17T05:03:01.4636171Z         1) <form id="login-form">…</form> aka getByText('Log in to BN Online Username')
2026-05-17T05:03:01.4639114Z         2) <input type="text" required="" id="username" maxlength="64" name="username" autocomplete="username"/> aka getByRole('textbox', { name: 'Username' })
2026-05-17T05:03:01.4640137Z 
2026-05-17T05:03:01.4640411Z     Call log:
2026-05-17T05:03:01.4645867Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-17T05:03:01.4646802Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-17T05:03:01.4650046Z 
2026-05-17T05:03:01.4650175Z 
2026-05-17T05:03:01.4650431Z       36 |
2026-05-17T05:03:01.4651142Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-17T05:03:01.4652671Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-17T05:03:01.4653631Z          |                                                                           ^
2026-05-17T05:03:01.4654948Z       39 |       timeout: 5_000,
2026-05-17T05:03:01.4655412Z       40 |     });
2026-05-17T05:03:01.4655794Z       41 |
2026-05-17T05:03:01.4656444Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-17T05:03:01.4657034Z 
2026-05-17T05:03:01.4657815Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:01.4659083Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/test-failed-1.png
2026-05-17T05:03:01.4660594Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4661183Z 
2026-05-17T05:03:01.4661919Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4663142Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/video.webm
2026-05-17T05:03:01.4664608Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4666148Z 
2026-05-17T05:03:01.4666929Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/error-context.md
2026-05-17T05:03:01.4667723Z 
2026-05-17T05:03:01.4668382Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:01.4669484Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-17T05:03:01.4670278Z     Usage:
2026-05-17T05:03:01.4670528Z 
2026-05-17T05:03:01.4671369Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-17T05:03:01.4672494Z 
2026-05-17T05:03:01.4673110Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4673633Z 
2026-05-17T05:03:01.4674546Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4675321Z 
2026-05-17T05:03:01.4676066Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:01.4676694Z 
2026-05-17T05:03:01.4677145Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-17T05:03:01.4677806Z     Expected: visible
2026-05-17T05:03:01.4678678Z     Error: strict mode violation: locator('form#login-form, #login-form, #username') resolved to 2 elements:
2026-05-17T05:03:01.4679862Z         1) <form id="login-form">…</form> aka getByText('Log in to BN Online Username')
2026-05-17T05:03:01.4681523Z         2) <input type="text" required="" id="username" maxlength="64" name="username" autocomplete="username"/> aka getByRole('textbox', { name: 'Username' })
2026-05-17T05:03:01.4682583Z 
2026-05-17T05:03:01.4682909Z     Call log:
2026-05-17T05:03:01.4683633Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-17T05:03:01.4685042Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-17T05:03:01.4685705Z 
2026-05-17T05:03:01.4685886Z 
2026-05-17T05:03:01.4686187Z       36 |
2026-05-17T05:03:01.4686923Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-17T05:03:01.4688056Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-17T05:03:01.4689085Z          |                                                                           ^
2026-05-17T05:03:01.4689761Z       39 |       timeout: 5_000,
2026-05-17T05:03:01.4690299Z       40 |     });
2026-05-17T05:03:01.4690791Z       41 |
2026-05-17T05:03:01.4691535Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-17T05:03:01.4692240Z 
2026-05-17T05:03:01.4693061Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:01.4694703Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/test-failed-1.png
2026-05-17T05:03:01.4696277Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4696915Z 
2026-05-17T05:03:01.4697711Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4699004Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/video.webm
2026-05-17T05:03:01.4700500Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4701341Z 
2026-05-17T05:03:01.4702329Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/error-context.md
2026-05-17T05:03:01.4703499Z 
2026-05-17T05:03:01.4704493Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:01.4705905Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-17T05:03:01.4706904Z     Usage:
2026-05-17T05:03:01.4707181Z 
2026-05-17T05:03:01.4708189Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-17T05:03:01.4709273Z 
2026-05-17T05:03:01.4709954Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4710528Z 
2026-05-17T05:03:01.4711976Z   12) [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-17T05:03:01.4713216Z 
2026-05-17T05:03:01.4714111Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoMatch[2m([22m[32mexpected[39m[2m)[22m
2026-05-17T05:03:01.4714805Z 
2026-05-17T05:03:01.4715272Z     Expected pattern: [32m/^0028-NaviRunR_\d{3}$/[39m
2026-05-17T05:03:01.4716313Z     Received string:  [31m"0000-NaviStandD_000"[39m
2026-05-17T05:03:01.4716786Z 
2026-05-17T05:03:01.4717011Z       32 |
2026-05-17T05:03:01.4717634Z       33 |     // Frame key must match Run R pattern: '0028-NaviRunR_NNN'
2026-05-17T05:03:01.4718529Z     > 34 |     expect(frameWhileRunning).toMatch(/^0028-NaviRunR_\d{3}$/);
2026-05-17T05:03:01.4719259Z          |                               ^
2026-05-17T05:03:01.4719761Z       35 |
2026-05-17T05:03:01.4720261Z       36 |     // Release right arrow and wait for stop
2026-05-17T05:03:01.4720948Z       37 |     await page.keyboard.up('ArrowRight');
2026-05-17T05:03:01.4721917Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:34:31
2026-05-17T05:03:01.4722603Z 
2026-05-17T05:03:01.4723375Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:01.4725127Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/test-failed-1.png
2026-05-17T05:03:01.4744777Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4754515Z 
2026-05-17T05:03:01.4765336Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4776193Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/video.webm
2026-05-17T05:03:01.4777727Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4778428Z 
2026-05-17T05:03:01.4779390Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/error-context.md
2026-05-17T05:03:01.4780770Z 
2026-05-17T05:03:01.4781606Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:01.4782969Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-17T05:03:01.4784132Z     Usage:
2026-05-17T05:03:01.4784316Z 
2026-05-17T05:03:01.4785152Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-17T05:03:01.4786007Z 
2026-05-17T05:03:01.4786681Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4787136Z 
2026-05-17T05:03:01.4787711Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4788165Z 
2026-05-17T05:03:01.4788724Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:01.4789238Z 
2026-05-17T05:03:01.4789507Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-17T05:03:01.4789995Z     Expected: visible
2026-05-17T05:03:01.4790312Z     Timeout: 15000ms
2026-05-17T05:03:01.4790670Z     Error: element(s) not found
2026-05-17T05:03:01.4791212Z 
2026-05-17T05:03:01.4791348Z     Call log:
2026-05-17T05:03:01.4791926Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-17T05:03:01.4792713Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-17T05:03:01.4793134Z 
2026-05-17T05:03:01.4793152Z 
2026-05-17T05:03:01.4793369Z        at fixtures.ts:172
2026-05-17T05:03:01.4794100Z 
2026-05-17T05:03:01.4794283Z       170 |  */
2026-05-17T05:03:01.4794909Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-17T05:03:01.4795836Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-17T05:03:01.4796591Z           |                                                                ^
2026-05-17T05:03:01.4797075Z       173 |     timeout: 15_000,
2026-05-17T05:03:01.4797447Z       174 |   });
2026-05-17T05:03:01.4797744Z       175 | }
2026-05-17T05:03:01.4798428Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-17T05:03:01.4799438Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:22:11
2026-05-17T05:03:01.4799963Z 
2026-05-17T05:03:01.4800659Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:01.4801868Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/test-failed-1.png
2026-05-17T05:03:01.4803223Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4803660Z 
2026-05-17T05:03:01.4804535Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4805723Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/video.webm
2026-05-17T05:03:01.4806837Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4807159Z 
2026-05-17T05:03:01.4807970Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/error-context.md
2026-05-17T05:03:01.4808802Z 
2026-05-17T05:03:01.4809475Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:01.4811115Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-17T05:03:01.4811982Z     Usage:
2026-05-17T05:03:01.4812110Z 
2026-05-17T05:03:01.4812668Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-17T05:03:01.4813421Z 
2026-05-17T05:03:01.4814098Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4814405Z 
2026-05-17T05:03:01.4815238Z   13) [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) 
2026-05-17T05:03:01.4816168Z 
2026-05-17T05:03:01.4816757Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:01.4817272Z 
2026-05-17T05:03:01.4817552Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-17T05:03:01.4818052Z     Expected: visible
2026-05-17T05:03:01.4818793Z     Timeout: 15000ms
2026-05-17T05:03:01.4819082Z     Error: element(s) not found
2026-05-17T05:03:01.4819263Z 
2026-05-17T05:03:01.4819358Z     Call log:
2026-05-17T05:03:01.4819764Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-17T05:03:01.4820262Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-17T05:03:01.4820551Z 
2026-05-17T05:03:01.4820557Z 
2026-05-17T05:03:01.4820661Z        at fixtures.ts:172
2026-05-17T05:03:01.4820816Z 
2026-05-17T05:03:01.4820910Z       170 |  */
2026-05-17T05:03:01.4821300Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-17T05:03:01.4821880Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-17T05:03:01.4822656Z           |                                                                ^
2026-05-17T05:03:01.4823174Z       173 |     timeout: 15_000,
2026-05-17T05:03:01.4823553Z       174 |   });
2026-05-17T05:03:01.4824046Z       175 | }
2026-05-17T05:03:01.4824761Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-17T05:03:01.4826032Z         at loginAndAssertTiles (/home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-collision-boundary.spec.ts:38:9)
2026-05-17T05:03:01.4827049Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-collision-boundary.spec.ts:137:5
2026-05-17T05:03:01.4827610Z 
2026-05-17T05:03:01.4828316Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:01.4830004Z     test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/test-failed-1.png
2026-05-17T05:03:01.4831392Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4832017Z 
2026-05-17T05:03:01.4832664Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4833777Z     test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/video.webm
2026-05-17T05:03:01.4835413Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4835713Z 
2026-05-17T05:03:01.4836450Z     Error Context: test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/error-context.md
2026-05-17T05:03:01.4837656Z 
2026-05-17T05:03:01.4838358Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:01.4839478Z     test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/trace.zip
2026-05-17T05:03:01.4840541Z     Usage:
2026-05-17T05:03:01.4840724Z 
2026-05-17T05:03:01.4841529Z         pnpm exec playwright show-trace test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/trace.zip
2026-05-17T05:03:01.4842363Z 
2026-05-17T05:03:01.4843008Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4843473Z 
2026-05-17T05:03:01.4844843Z   14) [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) 
2026-05-17T05:03:01.4845715Z 
2026-05-17T05:03:01.4846372Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:01.4846865Z 
2026-05-17T05:03:01.4847049Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-17T05:03:01.4847378Z     Expected: visible
2026-05-17T05:03:01.4847619Z     Timeout: 15000ms
2026-05-17T05:03:01.4847895Z     Error: element(s) not found
2026-05-17T05:03:01.4848070Z 
2026-05-17T05:03:01.4848164Z     Call log:
2026-05-17T05:03:01.4848532Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-17T05:03:01.4849037Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-17T05:03:01.4849305Z 
2026-05-17T05:03:01.4849311Z 
2026-05-17T05:03:01.4849414Z        at fixtures.ts:172
2026-05-17T05:03:01.4849570Z 
2026-05-17T05:03:01.4849658Z       170 |  */
2026-05-17T05:03:01.4850155Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-17T05:03:01.4851101Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-17T05:03:01.4851877Z           |                                                                ^
2026-05-17T05:03:01.4852398Z       173 |     timeout: 15_000,
2026-05-17T05:03:01.4852776Z       174 |   });
2026-05-17T05:03:01.4853097Z       175 | }
2026-05-17T05:03:01.4854002Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-17T05:03:01.4854870Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-direction-convergence.spec.ts:96:11
2026-05-17T05:03:01.4855255Z 
2026-05-17T05:03:01.4855714Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:01.4856809Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/test-failed-1.png
2026-05-17T05:03:01.4858115Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4858552Z 
2026-05-17T05:03:01.4859437Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:01.4860249Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/test-failed-2.png
2026-05-17T05:03:01.4861070Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4861359Z 
2026-05-17T05:03:01.4861924Z     Error Context: test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/error-context.md
2026-05-17T05:03:01.4862678Z 
2026-05-17T05:03:01.4863341Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:01.4864743Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/trace.zip
2026-05-17T05:03:01.4865547Z     Usage:
2026-05-17T05:03:01.4865736Z 
2026-05-17T05:03:01.4866552Z         pnpm exec playwright show-trace test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/trace.zip
2026-05-17T05:03:01.4867438Z 
2026-05-17T05:03:01.4867856Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4868139Z 
2026-05-17T05:03:01.4868605Z   15) [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall 
2026-05-17T05:03:01.4869489Z 
2026-05-17T05:03:01.4870069Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-17T05:03:01.4870586Z 
2026-05-17T05:03:01.4870865Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-17T05:03:01.4871364Z     Expected: visible
2026-05-17T05:03:01.4871716Z     Timeout: 15000ms
2026-05-17T05:03:01.4872100Z     Error: element(s) not found
2026-05-17T05:03:01.4872363Z 
2026-05-17T05:03:01.4872526Z     Call log:
2026-05-17T05:03:01.4872979Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-17T05:03:01.4873483Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-17T05:03:01.4873764Z 
2026-05-17T05:03:01.4873772Z 
2026-05-17T05:03:01.4874114Z        at fixtures.ts:172
2026-05-17T05:03:01.4874271Z 
2026-05-17T05:03:01.4874363Z       170 |  */
2026-05-17T05:03:01.4874756Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-17T05:03:01.4875401Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-17T05:03:01.4876167Z           |                                                                ^
2026-05-17T05:03:01.4876698Z       173 |     timeout: 15_000,
2026-05-17T05:03:01.4877046Z       174 |   });
2026-05-17T05:03:01.4877260Z       175 | }
2026-05-17T05:03:01.4877714Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-17T05:03:01.4878574Z         at loginAndAssertTiles (/home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:24:9)
2026-05-17T05:03:01.4880037Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:119:5
2026-05-17T05:03:01.4880621Z 
2026-05-17T05:03:01.4881320Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-17T05:03:01.4882504Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/test-failed-1.png
2026-05-17T05:03:01.4883401Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4883674Z 
2026-05-17T05:03:01.4884336Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4885020Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/video.webm
2026-05-17T05:03:01.4885766Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4886033Z 
2026-05-17T05:03:01.4886501Z     Error Context: test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/error-context.md
2026-05-17T05:03:01.4887084Z 
2026-05-17T05:03:01.4887542Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-17T05:03:01.4888217Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/trace.zip
2026-05-17T05:03:01.4888905Z     Usage:
2026-05-17T05:03:01.4889027Z 
2026-05-17T05:03:01.4889844Z         pnpm exec playwright show-trace test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/trace.zip
2026-05-17T05:03:01.4890642Z 
2026-05-17T05:03:01.4891008Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-17T05:03:01.4891281Z 
2026-05-17T05:03:01.4891377Z   12 failed
2026-05-17T05:03:01.4892034Z     [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-17T05:03:01.4893586Z     [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-17T05:03:01.4895076Z     [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-17T05:03:01.4896569Z     [chromium] › test/e2e/cli-08-ghost-run-disconnect.spec.ts:21:1 › disconnect while moving: observer does not see stale remote cardinal run 
2026-05-17T05:03:01.4898280Z     [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) 
2026-05-17T05:03:01.4900280Z     [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-17T05:03:01.4902414Z     [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) 
2026-05-17T05:03:01.4905122Z     [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) 
2026-05-17T05:03:01.4907137Z     [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-17T05:03:01.4908872Z     [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-17T05:03:01.4910589Z     [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-17T05:03:01.4912642Z     [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-17T05:03:01.4914089Z   3 flaky
2026-05-17T05:03:01.4915151Z     [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) 
2026-05-17T05:03:01.4916945Z     [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) 
2026-05-17T05:03:01.4918816Z     [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall 
2026-05-17T05:03:01.4919632Z   24 passed (13.4m)
2026-05-17T05:03:01.5248115Z /home/runner/work/rebno/rebno/apps/client:
2026-05-17T05:03:01.5249766Z  ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @rebno/client@0.1.0 test:e2e: `playwright test`
2026-05-17T05:03:01.5250732Z Exit status 1
2026-05-17T05:03:01.5461202Z ##[error]Process completed with exit code 1.
